home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 681 / term / source.lha / EmulationPanel.c < prev    next >
C/C++ Source or Header  |  1992-05-09  |  8KB  |  291 lines

  1. /*
  2. **    $Id: EmulationPanel.c,v 1.5 92/04/21 16:58:43 olsen Sta Locker: olsen $
  3. **    $Revision: 1.5 $
  4. **    $Date: 92/04/21 16:58:43 $
  5. **
  6. **    Editing panel for emulation configuration
  7. **
  8. **    Copyright © 1990-1992 by Olaf `Olsen' Barthel & MXM
  9. **        All Rights Reserved
  10. */
  11.  
  12. #include "termGlobal.h"
  13.  
  14. enum    {    GAD_SMOOTHSCROLL,GAD_WRAPCHARS,GAD_WRAPCURSOR,GAD_INSERTMODE,GAD_NEWLINE,
  15.         GAD_NUMKEYPAD,GAD_CURSORKEYS,GAD_FONTSCALE,GAD_USE,GAD_CANCEL };
  16.  
  17. #define WIDTH    367
  18. #define HEIGHT    129
  19.  
  20. STATIC STRPTR ControlMode[3] =
  21. {
  22.     NULL,
  23.     NULL,
  24.     NULL
  25. };
  26.  
  27. STATIC STRPTR ScaleFontText[3] =
  28. {
  29.     NULL,
  30.     NULL,
  31.     NULL
  32. };
  33.  
  34. STATIC struct Gadget *
  35. CreateAllGadgets(struct Configuration *Config,struct Gadget *GadgetArray[],struct Gadget **GadgetList,APTR VisualInfo,UWORD TopEdge)
  36. {
  37.     struct Gadget        *Gadget;
  38.     struct NewGadget     NewGadget;
  39.     UWORD             Counter = 0;
  40.  
  41.     LocalizeString(ControlMode,MSG_EMULATIONPANEL_STANDARD_MODE_TXT,MSG_EMULATIONPANEL_APPLICATION_MODE_TXT);
  42.     LocalizeString(ScaleFontText,MSG_EMULATIONPANEL_NORMAL_SCALE_TXT,MSG_EMULATIONPANEL_HALF_WIDTH_TXT);
  43.  
  44.     memset(&NewGadget,0,sizeof(struct NewGadget));
  45.  
  46.     if(Gadget = CreateContext(GadgetList))
  47.     {
  48.         NewGadget . ng_Width        = 26;
  49.         NewGadget . ng_Height        = 11;
  50.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_SMOOTH_SCROLLING_GAD);
  51.         NewGadget . ng_TextAttr        = &DefaultFont;
  52.         NewGadget . ng_VisualInfo    = VisualInfo;
  53.         NewGadget . ng_GadgetID        = Counter;
  54.         NewGadget . ng_LeftEdge        = WIDTH - 10 - 196;
  55.         NewGadget . ng_TopEdge        = 1 + TopEdge;
  56.  
  57.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  58.             GT_Underscore,    '_',
  59.             GTCB_Checked,    !Config -> JumpScroll,
  60.         TAG_DONE);
  61.  
  62.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_WRAP_CHARACTERS_GAD);
  63.         NewGadget . ng_GadgetID        = Counter;
  64.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  65.  
  66.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  67.             GT_Underscore,    '_',
  68.             GTCB_Checked,    Config -> AutoWrap,
  69.         TAG_DONE);
  70.  
  71.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_WRAP_CURSOR_MOVES_GAD);
  72.         NewGadget . ng_GadgetID        = Counter;
  73.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  74.  
  75.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  76.             GT_Underscore,    '_',
  77.             GTCB_Checked,    Config -> CursorWrap,
  78.         TAG_DONE);
  79.  
  80.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_INSERT_MODE_GAD);
  81.         NewGadget . ng_GadgetID        = Counter;
  82.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  83.  
  84.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  85.             GT_Underscore,    '_',
  86.             GTCB_Checked,    Config -> InsertChar,
  87.         TAG_DONE);
  88.  
  89.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_NEW_LINE_MODE_GAD);
  90.         NewGadget . ng_GadgetID        = Counter;
  91.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  92.  
  93.         GadgetArray[Counter++] = Gadget = CreateGadget(CHECKBOX_KIND,Gadget,&NewGadget,
  94.             GT_Underscore,    '_',
  95.             GTCB_Checked,    Config -> NewLine,
  96.         TAG_DONE);
  97.  
  98.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_NUMERIC_KEYPAD_GAD);
  99.         NewGadget . ng_GadgetID        = Counter;
  100.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  101.         NewGadget . ng_Width        = 196;
  102.         NewGadget . ng_Height        = 12;
  103.  
  104.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  105.             GT_Underscore,    '_',
  106.             GTCY_Labels,    ControlMode,
  107.             GTCY_Active,    Config -> NumApp,
  108.         TAG_DONE);
  109.  
  110.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_CURSOR_KEYS_GAD);
  111.         NewGadget . ng_GadgetID        = Counter;
  112.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  113.  
  114.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  115.             GT_Underscore,    '_',
  116.             GTCY_Labels,    ControlMode,
  117.             GTCY_Active,    Config -> CursorApp,
  118.         TAG_DONE);
  119.  
  120.         NewGadget . ng_GadgetText    = LocaleString(MSG_EMULATIONPANEL_FONT_SCALE_GAD);
  121.         NewGadget . ng_GadgetID        = Counter;
  122.         NewGadget . ng_TopEdge        = NewGadget . ng_TopEdge + NewGadget . ng_Height + 1;
  123.  
  124.         GadgetArray[Counter++] = Gadget = CreateGadget(CYCLE_KIND,Gadget,&NewGadget,
  125.             GT_Underscore,    '_',
  126.             GTCY_Labels,    ScaleFontText,
  127.             GTCY_Active,    Config -> FontScale,
  128.         TAG_DONE);
  129.  
  130.         NewGadget . ng_Width        = 88;    /* NEW 52 */
  131.         NewGadget . ng_Height        = 12;
  132.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_USE_GAD);
  133.         NewGadget . ng_GadgetID        = Counter;
  134.         NewGadget . ng_Flags        = 0;
  135.         NewGadget . ng_LeftEdge        = 10;
  136.         NewGadget . ng_TopEdge        = HEIGHT - 3 - NewGadget . ng_Height;
  137.  
  138.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  139.             GT_Underscore,    '_',
  140.         TAG_DONE);
  141.  
  142.         NewGadget . ng_GadgetText    = LocaleString(MSG_GLOBAL_CANCEL_GAD);
  143.         NewGadget . ng_GadgetID        = Counter;
  144.         NewGadget . ng_LeftEdge        = WIDTH - 10 - NewGadget . ng_Width;
  145.  
  146.         GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  147.             GT_Underscore,    '_',
  148.         TAG_DONE);
  149.     }
  150.  
  151.     return(Gadget);
  152. }
  153.  
  154. VOID
  155. EmulationPanel(struct Configuration *Config)
  156. {
  157.     struct Window    *PanelWindow;
  158.     struct Gadget    *GadgetList;
  159.     struct Gadget    *GadgetArray[GAD_CANCEL + 1];
  160.  
  161.     ClearCursor();
  162.  
  163.     CopyMem(Config,&PrivateConfig,sizeof(struct Configuration));
  164.  
  165.     if(CreateAllGadgets(Config,&GadgetArray[0],&GadgetList,VisualInfo,Screen -> WBorTop + Screen -> Font -> ta_YSize + 1))
  166.     {
  167.         if(PanelWindow = OpenWindowTags(NULL,
  168.             WA_Left,    (Screen -> Width - WIDTH) >> 1,
  169.             WA_Top,        (Screen -> Height - HEIGHT) >> 1,
  170.             WA_Width,    WIDTH,
  171.             WA_Height,    HEIGHT,
  172.             WA_Activate,    TRUE,
  173.             WA_DragBar,    TRUE,
  174.             WA_DepthGadget,    TRUE,
  175.             WA_RMBTrap,    TRUE,
  176.             WA_DepthGadget,    TRUE,
  177.             WA_CloseGadget,    TRUE,
  178.             WA_CustomScreen,Screen,
  179.             WA_IDCMP,    IDCMP_CLOSEWINDOW | IDCMP_VANILLAKEY | CHECKBOXIDCMP | CYCLEIDCMP,
  180.             WA_Title,    LocaleString(MSG_EMULATIONPANEL_EMULATION_PREFERENCES_TXT),
  181.         TAG_DONE))
  182.         {
  183.             struct IntuiMessage    *Massage;
  184.             ULONG             Class,Code;
  185.             struct Gadget        *Gadget;
  186.             BYTE             Terminated = FALSE;
  187.  
  188.             PushWindow(PanelWindow);
  189.  
  190.             AddGList(PanelWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  191.             RefreshGList(GadgetList,PanelWindow,NULL,(UWORD)-1);
  192.             GT_RefreshWindow(PanelWindow,NULL);
  193.  
  194.             while(!Terminated)
  195.             {
  196.                 WaitPort(PanelWindow -> UserPort);
  197.  
  198.                 while(!Terminated && (Massage = (struct IntuiMessage *)GT_GetIMsg(PanelWindow -> UserPort)))
  199.                 {
  200.                     Class    = Massage -> Class;
  201.                     Code    = Massage -> Code;
  202.                     Gadget    = (struct Gadget *)Massage -> IAddress;
  203.  
  204.                     GT_ReplyIMsg(Massage);
  205.  
  206.                     if(Class == IDCMP_VANILLAKEY)
  207.                         KeySelect(GadgetArray,GAD_CANCEL,Code,PanelWindow,&Gadget,&Class,&Code);
  208.  
  209.                     if(Class == IDCMP_CLOSEWINDOW)
  210.                         Terminated = TRUE;
  211.  
  212. GadCheck:                if(Class == IDCMP_GADGETUP)
  213.                     {
  214.                         switch(Gadget -> GadgetID)
  215.                         {
  216.                             case GAD_USE:        Terminated = TRUE;
  217.  
  218.                                         Config -> JumpScroll    = !GT_CHECKED(GadgetArray[GAD_SMOOTHSCROLL]);
  219.                                         Config -> AutoWrap    = GT_CHECKED(GadgetArray[GAD_WRAPCHARS]);
  220.                                         Config -> CursorWrap    = GT_CHECKED(GadgetArray[GAD_WRAPCURSOR]);
  221.                                         Config -> InsertChar    = GT_CHECKED(GadgetArray[GAD_INSERTMODE]);
  222.                                         Config -> NewLine    = GT_CHECKED(GadgetArray[GAD_NEWLINE]);
  223.  
  224.                                         break;
  225.  
  226.                             case GAD_CANCEL:    Terminated = TRUE;
  227.  
  228.                                         CopyMem(&PrivateConfig,Config,sizeof(struct Configuration));
  229.  
  230.                                         break;
  231.  
  232.                             case GAD_NUMKEYPAD:    Config -> NumApp = Code;
  233.                                         break;
  234.  
  235.                             case GAD_CURSORKEYS:    Config -> CursorApp = Code;
  236.                                         break;
  237.  
  238.                             case GAD_FONTSCALE:    Config -> FontScale = Code;
  239.                                         break;
  240.  
  241.                             default:        break;
  242.                         }
  243.                     }
  244.                 }
  245.             }
  246.  
  247.             RemoveGList(PanelWindow,GadgetList,(UWORD)-1);
  248.  
  249.             PopWindow();
  250.  
  251.             CloseWindow(PanelWindow);
  252.         }
  253.  
  254.         FreeGadgets(GadgetList);
  255.     }
  256.  
  257.     if(PrivateConfig . FontScale == SCALE_HALF && Config -> FontScale != SCALE_HALF)
  258.     {
  259.         if(Config -> EightyColumns)
  260.         {
  261.             LastColumn = 79;
  262.  
  263.             LastPixel = 80 * 8 - 1;
  264.         }
  265.         else
  266.         {
  267.             LastColumn = ((Window -> Width & ~7) / 8) - 1;
  268.  
  269.             LastPixel = (Window -> Width & ~7) - 1;
  270.         }
  271.     }
  272.  
  273.     if(PrivateConfig . FontScale != SCALE_HALF && Config -> FontScale == SCALE_HALF)
  274.     {
  275.         if(Config -> EightyColumns)
  276.         {
  277.             LastColumn = 131;
  278.  
  279.             LastPixel = 80 * 8 - 1;
  280.         }
  281.         else
  282.         {
  283.             LastColumn = ((Window -> Width & ~7) / 4) - 1;
  284.  
  285.             LastPixel = (Window -> Width & ~7) - 1;
  286.         }
  287.     }
  288.  
  289.     SetCursor();
  290. }
  291.